/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package savet.gui.controllers;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.openswing.swing.message.receive.java.Response;
import org.openswing.swing.message.receive.java.VOListResponse;
import org.openswing.swing.message.receive.java.VOResponse;
import org.openswing.swing.message.receive.java.ValueObject;
import org.openswing.swing.table.client.GridController;
import org.openswing.swing.table.java.GridDataLocator;
import savet.entidades.Ementa;
import savet.gui.util.EmentarioPanelUtilController;
import savet.gui.util.EmentarioUtilController;
import savet.repositorio.IRepositorioEmenta;
import savet.repositorio.RepositorioEmenta;

/**
 *
 * @author Rafael
 */
public class EmentarioController extends GridController implements GridDataLocator {

    private List<Ementa> ementas = new ArrayList<Ementa>();
    private IRepositorioEmenta repositorioEmenta = new RepositorioEmenta();
    private Ementa ementaSelecionada;
    private EmentarioUtilController utilEmentario;
    private EmentarioPanelUtilController panelUtilController;
    private String filtro = null;
    private String tipoEmenta = "Todas";

    public Response loadData(int action, int startIndex, Map filteredColumns, ArrayList currentSortedColumns, ArrayList currentSortedVersusColumns, Class valueObjectType, Map otherGridParams) {

        if (filtro != null) {
            List<Ementa> list = filtrarEmentas(ementas, filtro);
            VOListResponse listaFiltrada = new VOListResponse();
            listaFiltrada.setRows(list);
            filtro = null;
            return listaFiltrada;
        }


        if (repositorioEmenta.getEmentaCount() > 0) {
            if (tipoEmenta.equals("Todas")) {
                ementas = repositorioEmenta.findEmentaEntities();
            } else if (tipoEmenta.equals("Legislação")) {
                ementas = repositorioEmenta.getPorPropiedade("tipo", "L");
            } else if (tipoEmenta.equals("SST")) {
                ementas = repositorioEmenta.getPorPropiedade("tipo", "S");
            }
        }

        VOListResponse listResponse = new VOListResponse();
        listResponse.setRows(ementas);
        return listResponse;
    }

    @Override
    public Response insertRecords(int[] rowNumbers, ArrayList newValueObjects) throws Exception {
        VOListResponse listResponse = new VOListResponse();
        for (Object object : newValueObjects) {
            ementas.add((Ementa) object);
            repositorioEmenta.create((Ementa) object);
        }
        listResponse.setRows(newValueObjects);
        return listResponse;
    }

    @Override
    public void selectedCell(int rowNumber, int columnIndex, String attributedName, ValueObject persistentObject) {
        Ementa ementa = (Ementa) persistentObject;
        ementaSelecionada = ementa;
        if (utilEmentario != null) {
            utilEmentario.atualizarComponentes(ementaSelecionada.getDescricao(), ementaSelecionada.getNota(), ementaSelecionada.getPerCapita(), ementaSelecionada.getTipo(), ementaSelecionada.getGradacao());
        }
        if (panelUtilController != null) {
            panelUtilController.atualizarComponentes(ementaSelecionada);
        }
    }

    @Override
    public Response deleteRecords(ArrayList persistentObjects) throws Exception {

        for (Object object : persistentObjects) {
            Ementa ementa = (Ementa) object;
            repositorioEmenta.destroy(ementa.getEmenta());
            ementas.remove(ementa);
        }
        VOListResponse response = new VOListResponse();
        response.setRows(persistentObjects);
        return response;
    }

    @Override
    public Response updateRecords(int[] rowNumbers, ArrayList oldPersistentObjects, ArrayList persistentObjects) throws Exception {
        return new VOResponse();
    }

    public List<Ementa> getEmentas() {
        return ementas;
    }

    public void setEmentas(List<Ementa> ementas) {
        this.ementas = ementas;
    }

    public Ementa getEmentaSelecionada() {
        return ementaSelecionada;
    }

    public void setEmentaSelecionada(Ementa ementaSelecionada) {
        this.ementaSelecionada = ementaSelecionada;
    }

    public EmentarioUtilController getUtilEmentario() {
        return utilEmentario;
    }

    public void setUtilEmentario(EmentarioUtilController utilEmentario) {
        this.utilEmentario = utilEmentario;
    }

    public List<Ementa> filtrarEmentas(List<Ementa> ementas, String filtro) {

        List<Ementa> list = new ArrayList<Ementa>();

        for (Ementa ementa : ementas) {
            if (ementa.getGrupo() != null) {
                if (ementa.getGrupo().toLowerCase().contains(filtro.toLowerCase()) || ementa.getGrupo().equalsIgnoreCase(filtro)) {
                    list.add(ementa);
                }
            } else if (ementa.getCapitulacao() != null) {
                if (ementa.getCapitulacao().toLowerCase().contains(filtro.toLowerCase()) || ementa.getCapitulacao().equalsIgnoreCase(filtro)) {
                    list.add(ementa);
                }
            } else if (ementa.getDescricao() != null) {
                if (ementa.getDescricao().toLowerCase().contains(filtro.toLowerCase()) || ementa.getDescricao().equalsIgnoreCase(filtro)) {
                    list.add(ementa);
                }
            } else if (ementa.getEmenta() != null) {
                if (ementa.getEmenta().contains(filtro) || ementa.getEmenta().equals(filtro)) {
                    list.add(ementa);
                }
            } else if (ementa.getGradacao() != null) {
                if (ementa.getGradacao().toLowerCase().contains(filtro.toLowerCase()) || ementa.getGradacao().equalsIgnoreCase(filtro)) {
                    list.add(ementa);
                }
            } else if (ementa.getNota() != null) {
                if (ementa.getNota().toLowerCase().contains(filtro.toLowerCase()) || ementa.getNota().equalsIgnoreCase(filtro)) {
                    list.add(ementa);
                }
            } else if (ementa.getPerCapita() != null) {
                if (ementa.getPerCapita().toLowerCase().contains(filtro.toLowerCase()) || ementa.getPerCapita().equalsIgnoreCase(filtro)) {
                    list.add(ementa);
                }
            } else if (ementa.getTipo() != null) {
                if (ementa.getTipo().contains(filtro) || ementa.getTipo().equalsIgnoreCase(filtro)) {
                    list.add(ementa);
                }
            }

        }

        return list;
    }

    public String getFiltro() {
        return filtro;
    }

    public void setFiltro(String filtro) {
        this.filtro = filtro;
    }

    public String getTipoEmenta() {
        return tipoEmenta;
    }

    public void setTipoEmenta(String tipoEmenta) {
        this.tipoEmenta = tipoEmenta;
    }

    public EmentarioPanelUtilController getPanelUtilController() {
        return panelUtilController;
    }

    public void setPanelUtilController(EmentarioPanelUtilController panelUtilController) {
        this.panelUtilController = panelUtilController;
    }
}
